草庐IT

c++ - Lua C++ 表迭代

全部标签

c++ - 是否有用于 C 字符串的标准 C++ 迭代器?

有时我需要使用通用C++迭代器范围接口(interface)[first,last)将C字符串传递给函数。是否有适用于这些情况的标准C++迭代器类,或无需复制字符串或调用strlen()的标准方法?编辑:我知道我可以使用指针作为迭代器,但我必须知道字符串在哪里结束,我需要调用strlen()。编辑2:虽然我不知道这样的迭代器是否标准化,但我当然知道这是可能的。回应讽刺的回答和评论,这是stub(不完整,未经测试):classCStringIterator{public:CStringIterator(char*str=nullptr):ptr(str){}booloperator==(

c++ - 编译器无法识别模板函数中的映射迭代器

这个问题在这里已经有了答案:Troublewithdependenttypesintemplates(2个答案)关闭去年。我有以下代码。templateboolhas_key(keychkey,std::mapmap){for(std::map::iteratorit=map.begin();#line13referencedbygccit!=map.end();++it){if(chkey==it->first)returntrue;}returnfalse;}GCC给我以下错误。objects.hpp:Infunction`boolhas_key(key,std::map,std:

c++ - 为什么取消引用字符串 vector 迭代器需要括号?

vectorMyStrings;vector::iteratorItStr;我正在使用c_str()返回指向字符串的指针。为什么需要用括号取消引用?不编译:*ItStr.c_str();errorC2039:'c_str':isnotamemberof'std::vector::iterator'编译/使用迭代器周围的括号:(*ItStr).c_str();如果您能给我指出正确的方向(没有双关语意),我将不胜感激。谢谢! 最佳答案 .的优先级高于一元*.*ItStr.c_str()就像您说的是*(ItStr.c_str())。当然,

c++ - 迭代还是使用计数器,这是个问题

每当有人开始使用STL并且他们有一个vector时,您通常会看到:vectorvec;//...code...for(vector::iteratoriter=vec.begin();iter!=vec.end();++iter){//dostuff}我只是找到了整个vector::iterator语法令人作呕。我知道你可以typedefvector::iteratorVecIterInt,而且是稍微好一些..但问题是,好的ol'有什么问题:for(inti=0;i 最佳答案 当您使用索引执行对容器(std::vector或其他任何

c++ - 迭代器与反向迭代器

我正在使用std::map来存储很多元素(元素对),我有一个“小”疑问。在我的std::map、iterator或reverse_iterator上迭代所有元素哪个更有效? 最佳答案 根据记录,在std::map和std::set容器上取消引用reverse_iterator是比使用iterator慢两倍——在Intel/AMD处理器上同时使用-O3gcc3.4.6和MSVC(在PPC架构上慢近3倍)同样适用于const_reverse_iterator与const_iterator。这是因为reverse_iterator实际上指

c++ - 同时迭代两个或多个容器的最佳方法是什么

C++11提供了多种迭代容器的方法。例如:基于范围的循环for(autoc:container)fun(c)std::for_eachfor_each(container.begin(),container.end(),fun)然而,迭代两个(或更多)相同大小的容器以完成如下操作的推荐方法是什么:for(unsignedi=0;i 最佳答案 晚会晚了。但是:我会遍历索引。但不是使用经典的for循环,而是使用基于范围的for循环遍历索引:for(unsignedi:indices(containerA)){containerA[i]=

如何在tf.Estimator的input_fn中使用tf.data的初始迭代器?

我想通过tf.estimator.Estimator但是很难与tf.dataAPI。我有这样的东西:defmodel_fn(features,labels,params,mode):#Definesmodel'sops.#Initializeswithtf.train.Scaffold.#Returnsantf.estimator.EstimatorSpec.definput_fn():dataset=tf.data.TextLineDataset("test.txt")#map,shuffle,padded_batch,etc.iterator=dataset.make_initializa

c++ - 容器的无序迭代

我的意图是隐藏容器的实现细节,这样客户端就不能依赖隐式插入顺序。我试图通过以某种方式改变迭代发生的顺序来强制执行此操作。我有一个容器,我想在迭代时随机排序。这是一些伪代码。namespaceabc{templateclassRandomList{voidinsert(Tt);Terase(Tt);iteratorbegin();iteratorend();}}namespacetest{intmain(){RandomListlist;list.insert(1);list.insert(2);list.insert(3);for(typenameRandomList::iterato

c++ - 哪些因素使迭代器在 Debug模式下如此缓慢(VC++ 2012)

我有一个包含10000个随机数(mod100)的vector,我想计算其中两个数字之和为100的对数。我写了以下内容:autonoPairsSumTo100=0;constautoitEnd=end(myNums);for(autoit1=begin(myNums);it1!=itEnd;++it1){for(autoit2=it1;it2!=itEnd;++it2){if(*it1+*it2==100){noPairsSumTo100++;}}}在我的机器上,这需要大约21.6秒才能在Debug模式下运行。如果我设置_ITERATOR_DEBUG_LEVEL=0(将_SECURE_S

c++ - 在函数模板中创建容器迭代器

代码是使用GCC编译的。这在VC++中没有任何错误templatevoidFunction(T&A){T::iteratorit;//Error:dependent-name'T::iterator'isparsedasanon-type,//butinstatiationyieldsatype.}Thisarticle声明编译器无法确定T中的迭代器是否存在类型是一个类或只是一个静态成员。所以我们必须使用typename将符号分类为类型的关键字。我的问题是,因为T在编译时已知,那么编译器已经知道iteratorT里面是一个类(在我的例子中T是vector)。那么为什么会出现错误呢?这也